package com.xdxc.utils;

import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

public final class ListConverter {
    private ListConverter() {
        // 私有构造器防止实例化
    }

    /**
     * 将 List<Long> 转换为 List<String>，自动处理 null 值
     * - 输入 null 时返回空列表
     * - Long 元素为 null 时转换为空字符串 ""
     *
     * @param longList 输入的 Long 列表
     * @return 转换后的 String 列表
     */
    public static List<String> convertLongToStringList(List<Long> longList) {
        if (longList == null) {
            return Collections.emptyList();
        }
        return longList.stream()
                .map(value -> value != null ? value.toString() : "")
                .collect(Collectors.toList());
    }

    /**
     * 将 List<Long> 转换为 List<String>，保留原始 null 值
     * - 输入 null 时返回空列表
     * - Long 元素为 null 时保留为 null
     *
     * @param longList 输入的 Long 列表
     * @return 转换后的 String 列表（含可能的 null 元素）
     */
    public static List<String> convertLongToStringListWithNulls(List<Long> longList) {
        if (longList == null) {
            return Collections.emptyList();
        }
        return longList.stream()
                .map(value -> value != null ? value.toString() : null)
                .collect(Collectors.toList());
    }

    /**
     * 将 List<String> 转换为 List<Long>，自动处理 null 和非法值
     * - 输入 null 时返回空列表
     * - 字符串为 null 或无法解析为 Long 时，结果中对应位置为 null
     *
     * @param stringList 输入的 String 列表
     * @return 转换后的 Long 列表（含可能的 null 元素）
     */
    public static List<Long> convertStringToLongList(List<String> stringList) {
        if (stringList == null) {
            return Collections.emptyList();
        }
        return stringList.stream()
                .map(value -> {
                    if (value == null || value.trim().isEmpty()) {
                        return null; // 空字符串或 null 转换为 null
                    }
                    try {
                        return Long.parseLong(value.trim()); // 尝试解析为 Long
                    } catch (NumberFormatException e) {
                        return null; // 解析失败时返回 null
                    }
                })
                .collect(Collectors.toList());
    }
}